// 题目要求：
// 有 12 个选择题，给定四个数分别表示选 A，B，C，D 选项的个数
// 再给一个 m，表示有 m 个条件
// 再给 m 组整数 x 和 y，表示第 x 题 和 第 y 题的选项必须一样
// 问一共有多少种填法？

// 解题思路：
// 暴力枚举 dfs
// 画决策树：一个位置一个位置得选，每个位置分别枚举 A,B,C,D 四个选项
// 将超过给定选项个数的方案剪掉
// 再将不满足某几个位置相同的方案剪掉
// 剩余的方案就是复合条件的方案数

// 注意：某两个位置答案相同，可以通过一个二维 boolean 数组来实现
// 选完之后，遍历 pos 行，检查是否需要和某个位置相同，如果相同，判断下值是否相同，不相同返回 false
// 相同返回 true

import java.util.*;

public class FourChoices {
    public static int[] choice = new int[5];
    public static boolean[][] same = new boolean[13][13];
    public static int ret = 0;
    public static int[] t = new int[13];
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);

        for(int i = 1; i <= 4; i++) choice[i] = in.nextInt();
        int m = in.nextInt();

        while(m-- > 0){
            int x = in.nextInt();
            int y = in.nextInt();
            same[x][y] = same[y][x] = true;
        }

        dfs(1);

        System.out.println(ret);
    }

    public static void dfs(int pos){
        if(pos == 13){
            ret++;
            return;
        }
        for(int i = 1; i <= 4; i++){
            if(choice[i] > 0 && isSame(pos, i)){
                t[pos] = i;
                choice[i]--;
                dfs(pos + 1);
                t[pos] = 0;
                choice[i]++;
            }
        }
    }

    public static boolean isSame(int pos, int val){
        for(int i = 1; i < pos; i++){
            if(same[pos][i] && t[i] != val) return false;
        }
        return true;
    }
}
